//C13.14:dma.h -- inheritance and dynamic memory allocation
#ifndef DMA_H__ 
#define DMA_H__
#include <iostream>
#include <ostream>

// Base Class Using DMA
class baseDMA
{
    char * label;
    int rating;
    public:
        baseDMA(const char * l = "null", int r = 0);
        baseDMA(const baseDMA & rs);
        virtual ~baseDMA();
        baseDMA & operator=(const baseDMA & rs);
        friend std::ostream & operator<<(std::ostream & os, 
                                        const baseDMA & rs);
};

// derived class without DMA
// no destructor needed
// uses implicit copy constructor
// uses implicit assignment operator
class lacksDMA : public baseDMA
{
    enum { COL_LEN = 40 };
    char color[COL_LEN];
    public:
        lacksDMA(const char * c = "blank", const char * l = "null",
                int r = 0);
        lacksDMA(const char * c, const baseDMA & rs);
        friend std:: ostream & operator<<(std::ostream & os,
                                            const lacksDMA & rs);        
};

//derived class with DMA
class hasDMA : public baseDMA
{
    char * style;
    public:
        hasDMA(const char * s = "none", const char * l = "null", 
                int r = 0);
        hasDMA(const char * s, const baseDMA & rs);
        hasDMA(const hasDMA & hs);
        ~hasDMA();
        hasDMA & operator=(const hasDMA & rs);
        friend std::ostream & operator<<(std::ostream & os, 
                                          const hasDMA & rs);
};
#endif